﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using Data;

namespace DDMedlem.Buisness.Rapportering
{
    public class Rapport
    {

        public delegate DataSet findMetode(string sql);

        public DataSet HentListe(findMetode metode, string sql)
        {
            return metode(sql);
        }

        public DataSet VisAlleMedlemmer(string sql)
        {

            List<object[]> liste = DB.HentListe(sql);
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            //Kolonne definition
            dt.Columns.Add("Fornavn", typeof(string));
            dt.Columns.Add("Efternavn", typeof(string));
            dt.Columns.Add("Adresse", typeof(string));
            dt.Columns.Add("Postnr", typeof(string));
            dt.Columns.Add("Bynavn", typeof(string));
            dt.Columns.Add("Telefon", typeof(string));
            dt.Columns.Add("Mobil", typeof(string));
            dt.Columns.Add("E-mail", typeof(string));


            

            foreach (object[] o in liste)
            {
                DataRow dr = dt.NewRow();

                for (int i = 0; i < o.Length; i++)
                    dr[i] = o[i].ToString();

                dt.Rows.Add(dr);
            }


            
            
            

            ds.Tables.Add(dt);
            return ds;
        }
       
        public DataSet VisHustandsListe(string sql)
        {
            List<object[]> liste = DB.HentListe(sql);
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            //Kolonne definition
            dt.Columns.Add("Fornavn", typeof(string));
            dt.Columns.Add("Efternavn", typeof(string));
            dt.Columns.Add("Ægtefælle Fornavn", typeof(string));
            dt.Columns.Add("Ægtefælle Efternavn", typeof(string));
            dt.Columns.Add("Adresse", typeof(string));
            dt.Columns.Add("Postnr", typeof(string));
            dt.Columns.Add("Bynavn", typeof(string));
           




            foreach (object[] o in liste)
            {
                DataRow dr = dt.NewRow();

                for (int i = 0; i < o.Length; i++)
                    dr[i] = o[i].ToString();

                dt.Rows.Add(dr);
            }
            sql = "SELECT Fornavn, Efternavn, Adresse, Postnr, Bynavn FROM samlever_medlem_by WHERE Samlever_id IS NULL";
            liste = DB.HentListe(sql);

            foreach (object[] o in liste)
            {
                DataRow dr = dt.NewRow();
                int kollone = 0;

                for (int i = 0; i < o.Length; i++)
                {
                    
                    if (i == 2 )
                        kollone = 4;
                    else
                        dr[kollone] = o[i].ToString();
                    kollone++;
                }
                dt.Rows.Add(dr);
            }



            ds.Tables.Add(dt);
            return ds;
        }

        public DataSet RundeDage(string sql)
        {

            List<object[]> liste = DB.HentListe(sql);
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            //Kolonne definition
            dt.Columns.Add("Fornavn", typeof(string));
            dt.Columns.Add("Efternavn", typeof(string));
            dt.Columns.Add("Fødselsdato", typeof(string));
            dt.Columns.Add("Fylder", typeof(string));
            
            foreach (object[] o in liste)
            {
                DataRow dr = dt.NewRow();

                dr[0] = o[0].ToString();
                dr[1] = o[1].ToString();
                long ticks = Convert.ToInt64(o[2].ToString());
                DateTime fd = new DateTime(ticks);
                dr[2] = fd.ToShortDateString();
                dr[3] = (DateTime.Now.Year - fd.Year).ToString();
                
                dt.Rows.Add(dr);
            }






            ds.Tables.Add(dt);
            return ds;
        }
        public List<Query> QueryListe()
        {
            
            List<Query> liste = new List<Query>();
            liste.Add(new Query("Vælg hvilken liste du vil have vist", "", null));

            string sql = "SELECT * FROM AdresselisteAlleMdl";
            liste.Add(new Query("Alle medlemmer med kontaktoplysninger", sql, this.VisAlleMedlemmer));

            sql = "SELECT s1.Fornavn, s1.Efternavn,s2.Fornavn, s2.Efternavn, s1.Adresse,s1.Postnr,s1.Bynavn FROM samlever_medlem_by s1, samlever_medlem_by s2 WHERE s1.Samlever_id = s2.uid AND s1.uid < s2.uid";
            liste.Add(new Query("Adresseliste over alle medlemmer baseret på husstand", sql, this.VisHustandsListe));

            int treds = DateTime.Now.Year-60;
            int femogtreds = DateTime.Now.Year-65;
            int halvfjerds = DateTime.Now.Year-70;
            int femoghalvfjerds = DateTime.Now.Year-75;
            int firs = DateTime.Now.Year-80;
            int femogfirs = DateTime.Now.Year-85;
            int halvfems = DateTime.Now.Year-90;
            int femoghalvfems = DateTime.Now.Year-95;
            int hundrede = DateTime.Now.Year-100;
            int hundredeogfem = DateTime.Now.Year-105;

            sql = "SELECT Fornavn, Efternavn, Fødedato FROM Person WHERE (Dødsdato IS NULL) AND ((Fødedato >=" + new DateTime(treds, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(treds, 12, 31).Ticks + ") or (Fødedato >=" + new DateTime(femogtreds, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(femogtreds, 12, 31).Ticks + ") or (Fødedato >=" + new DateTime(halvfjerds, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(halvfjerds, 12, 31).Ticks + ") or (Fødedato >=" + new DateTime(femoghalvfjerds, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(femoghalvfjerds, 12, 31).Ticks + ")  or (Fødedato >=" + new DateTime(firs, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(firs, 12, 31).Ticks + ") or (Fødedato >=" + new DateTime(femogfirs, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(femogfirs, 12, 31).Ticks + ") or (Fødedato >=" + new DateTime(halvfems, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(halvfems, 12, 31).Ticks + ")or (Fødedato >=" + new DateTime(femoghalvfems, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(femoghalvfems, 12, 31).Ticks + ") or (Fødedato >=" + new DateTime(hundrede, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(hundrede, 12, 31).Ticks + ") or (Fødedato >=" + new DateTime(hundredeogfem, 1, 1).Ticks + " AND Fødedato <= " + new DateTime(hundredeogfem, 12, 31).Ticks + "))";
            liste.Add(new Query("Liste over runde fødselsdage", sql, this.RundeDage));

            return liste;
        }

    }
}